近幾年MicroSoft、Google、Amazon都大力讚揚Rust,例如【Google投百萬美元給Rust基金會】、【微軟再組新團隊,欲將C#代碼改寫為Rust】、【AWS大量投資Rust社群,包括開源Tokio】、【Rust will go into Linux 6.1】,為什麼呢?
筆者認為Rust程式語言兼具Python與C優點,Python語言優點如下:
簡單易入門,變數不需宣告資料型別,可直接使用,因為語言創造者希望撰寫Python,就像寫英文一樣簡單直覺。可以從【Python忍者宣言】一窺究竟,在終端機內輸入python,再輸入import this,如下圖。
套件(Package)齊全,開發生產力超高:官方目前已註冊超過562,000個套件,不管是機器學習、數值分析、資料庫、網頁、UI、系統程式...,一應俱全,只要善用套件,就可以最簡約的程式碼完成應用系統開發。
相對的,C語言優點如下:
Rust程式語言兼具Python與C優點,並改善Python與C缺點,說明如下:
套件(Crate)也非常多,官方目前已註冊超過154,000個套件,雖然數量及完整度不及Python,但遠比C/C++來的完善。也可以參考awesome-rust的分類,各種應用非常多元。
套件管理:Python以pip指令安裝套件,Rust則以cargo指令安裝套件,pip會將套件安裝在統一的位置,例如C:\Users<使用者帳號>\anaconda3\Lib\site-packages,常會造成多個套件依賴不同版本的其他套件,造成困擾,Rust的cargo指令會將套件安裝在個別的專案內,可避免上述的錯亂狀況。
Rust是一個編譯器,可輕易編譯成二進位的執行檔或函數庫,例如程式main.rs內容如下:
fn main(){
println!("Hello Rust !!");
}
執行 rustc main.rs,瞬間就創建main.exe,可直接double click執行,不需原始程式碼。
let x: &str = "Hello, world!";
let substr : &str = &x[2..]; // 從第3個字元至最後
fn main() {
let x: &str = "Hello, world!";
println!("{}",&x[20..]); // x 不足20個字元
}
編譯時會出現錯誤訊息:【byte index 20 is out of bounds of Hello, world!
】。
除了語言本身的優點外,Rust也導入許多設計典範(Design patterns),例如泛型(Generics)、特徵(Trait)、巨集(Macro)、閉包(Closure),可以幫我們撰寫出高品質的程式碼,例如並行處理(Concurrency)、物件導向程式設計(OOP)、函數式程式設計(Functional Programming)、特性導向程式設計(Aspect Oriented Programming, AOP)...等。
提供跨語言介面規格(Foreign Function Interface, FFI)規格,可輕易的與其他語言整合,包括C、Python、C#...。許多Python套件都改用Rust開發,同時提供多種語言呼叫,並可提升執行效能,例如Polars。
遵照官網安裝指引,下載並執行安裝程式即可,Rust是一個跨平臺的語言,可在Windows、Linux及Mac上安裝,官網上面有非常多的免費書籍可參閱。
Rust雖然具備諸多優點,但學習曲線陡峭,因此筆者最近剛完成【Rust 最佳入門與實戰】一書的撰寫,希望能與讀者分享Rust開發心得,內容除了Rust語言的入門、設計典範(Design patterns)外,也著重應用的探討,包括網頁、WebAssembly、桌面程式、資料庫、機器學習/深度學習、區塊鏈…等。